package com.luli.controllor;

/**
 * 陆离
 * 2024/11/29
 */
import cn.hutool.system.UserInfo;
import com.alibaba.fastjson.JSON;
import com.luli.entity.Person;
import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.function.Predicate;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;

//java8条件
public class QueryResultFiltering {

    public static void main(String[] args) {
        // 创建一个包含Person对象的List
        List<Person> personList = new ArrayList<>();
        personList.add(new Person("Alice", 25, "Female"));
        personList.add(new Person("Bob", 30, "Male"));
        personList.add(new Person("Charlie", 20, "Male"));
        personList.add(new Person("David", 30, "Male"));

        // 模拟传入的可能为空的查询参数
        String nameParam = "Alice";
        Integer ageParam = null;
        String genderParam = "";

        // 对查询结果进行过滤
//        List<Person> resultList = personList.stream()
//                .filter(buildPredicate(nameParam, ageParam, genderParam))
//                .collect(Collectors.toList());
//
//        System.out.println("满足条件的人员列表：");
//        resultList.forEach(System.out::println);

        ArrayList<Object> objects = new ArrayList<>();
        for (Person person : personList) {
            if (person.getName().contains("ar")){
                objects.add(person);
            }
        }
        System.out.println(objects);

    }

    // 构建用于过滤的Predicate
    private static Predicate<Person> buildPredicate(String nameParam, Integer ageParam, String genderParam) {
        List<Predicate<Person>> predicates = new ArrayList<>();

        // 如果nameParam不为空，添加相应的过滤条件
        if (StringUtils.isNotEmpty(nameParam)) {
            predicates.add(person -> person.getName().equals(nameParam));
        }

        // 如果ageParam不为空，添加相应的过滤条件
        if (ageParam != null) {
            predicates.add(person -> person.getAge() == ageParam);
        }

        // 如果genderParam不为空，添加相应的过滤条件
        if (StringUtils.isNotEmpty(genderParam)) {
            predicates.add(person -> person.getGender().equals(genderParam));
        }

        // 如果没有添加任何条件，返回一个总是返回true的Predicate，避免空指针异常
        if (predicates.isEmpty()) {
            return person -> true;
        }

        // 使用and方法组合所有条件Predicate
        return predicates.stream().reduce(Predicate::and).get();
    }
}